home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tech Arsenal 1
/
Tech Arsenal (Arsenal Computer).ISO
/
tek-11
/
clipss.zip
/
MISCSPRD.PRG
< prev
next >
Wrap
Text File
|
1991-09-19
|
6KB
|
250 lines
/*****
*
* MISCSPRD.PRG
* Miscellaneous Functions
*
* Luiz F. Quintela
* Copyright (c) 1991 Nantucket Corporation.
* All Rights Reserved.
*
* RMAKE 789
*
*/
#include "inkey.ch"
#include "setcurs.ch"
#include "error.ch"
#include "sprdsht.ch"
/*****
*
* Cursor Movement Methods
*
*/
FUNCTION MoveIt( nKey, oObj )
LOCAL nFound
STATIC aCursorMethods := ;
{ K_DOWN , {|b| b:down()},;
K_UP , {|b| b:up()},;
K_PGDN , {|b| b:pageDown()},;
K_PGUP , {|b| b:pageUp()},;
K_CTRL_PGUP , {|b| b:goTop()},;
K_CTRL_PGDN , {|b| b:goBottom()},;
K_RIGHT , {|b| b:right()},;
K_LEFT , {|b| b:left()},;
K_HOME , {|b| b:home()},;
K_END , {|b| b:end()},;
K_CTRL_LEFT , {|b| b:panLeft()},;
K_CTRL_RIGHT, {|b| b:panRight()},;
K_CTRL_HOME , {|b| b:panHome()},;
K_CTRL_END , {|b| b:panEnd()} }
// Search into array
nFound := ASCAN( aCursorMethods, nKey )
IF nFound != 0
EVAL( aCursorMethods[++nFound], oObj )
ENDIF
RETURN (nFound != 0)
/*****
*
* Wait for a key and optionally
* executes a code block during the
* wait time.
*
*/
FUNCTION WhatKey( nTime, bBlock )
LOCAL nKey
LOCAL i
nTime := IF(nTime == NIL, 0, nTime)
bBlock := IF(bBlock == NIL, {|| .F.}, bBlock)
IF nTime == 0 // Wait for a key,
// aka INKEY(0)
//
WHILE ((nKey := INKEY(.1)) == 0)
EVAL(bBlock)
END
// Key pressed
RETURN (nKey)
ELSE
// Time-out option
i := 0
WHILE i <= nTime
IF ((nKey := INKEY(.1)) != 0)
RETURN (nKey)
ELSE
EVAL(bBlock)
ENDIF
i += .1
END
RETURN (nKey)
ENDIF
// Dummy!
RETURN (NIL)
/*****
*
* Creates a screen shadow
*
*/
FUNCTION Shadow( nTop, nLeft, nBottom, nRight )
LOCAL nShadowLen, cShadow
cShadow := SAVESCREEN( nTop, nLeft, nBottom, nRight )
nShadowLen := LEN(cShadow)
RESTSCREEN( nTop, nLeft, nBottom, nRight,;
TRANSFORM(cShadow, REPLICATE("X", nShadowLen)))
RETURN (NIL)
/*****
*
* Opens the "Curtain"
*
*/
FUNCTION RestoreCurtain( aScrSave )
LOCAL i
FOR i := 0 TO MAXCOL()
RESTSCREEN( 0, i, MAXROW(), i, aScrSave[i + 1] )
@ 0, i + 1, MAXROW(), i + 1 BOX CHR(176) COLOR "W+/W"
INKEY(.01)
NEXT
RETURN (NIL)
/*****
*
* Stores the "Curtain"
*
*/
FUNCTION SaveCurtain()
LOCAL i, aMainScr[MAXCOL() + 1]
FOR i := 0 TO MAXCOL()
aMainScr[i + 1] := SAVESCREEN( 0, i, MAXROW(), i )
NEXT
RETURN (aMainScr)
/*****
*
* Screen Backgrownd
*
*/
FUNCTION PaintScreen()
LOCAL nMaxCol := MAXCOLUMN
LOCAL nMaxRow := MAXROW()
LOCAL i
// Begin
DISPBEGIN()
SETCOLOR(BACKGROUND)
SCROLL()
@ 0, 0 SAY SPACE(MAXCOLUMN + 1) COLOR FIRSTLINE
@ 0,12 SAY PAGEHEADER COLOR FIRSTLINE
SETCOLOR(BACKGROUND)
SCROLL( 3, 3, 19, 77)
// Background and its "shadows"
SETCOLOR(ALLBLACK)
SCROLL( 3, MAXCOLUMN - 1, nMaxRow - 4, MAXCOLUMN - 1)
SETCOLOR(BACKGROUND)
@ 2,MAXCOLUMN - 1 SAY CHR(220)
@ nMaxRow - 3, 2 SAY REPLICATE(CHR(223), MAXCOLUMN - 2)
// Bar
SETCOLOR(BARCOLOR)
@ 2, 1 SAY SPACE(MAXCOLUMN - 2)
SCROLL( 2, 1, nMaxRow - 4, 6)
FOR i := 1 TO MAXLEN
@ 2 + i, 1 SAY STR( i, 4, 0) + " "
NEXT
@ 2,14 SAY "A" COLOR BARCOLOR
@ 2,25 SAY "B" COLOR BARCOLOR
@ 2,36 SAY "C" COLOR BARCOLOR
@ 2,47 SAY "D" COLOR BARCOLOR
@ 2,58 SAY "E" COLOR BARCOLOR
@ 2,69 SAY "F" COLOR BARCOLOR
SCROLL( 3, 6, nMaxRow - 4, MAXCOLUMN - 2)
SETCOLOR(BACKGROUND)
DISPEND()
RETURN (NIL)
/*****
*
* Do you need HELP?
*
*/
FUNCTION NeedHelp( nTime, bBlock )
LOCAL cScr, cClr
LOCAL aCont := CreateButtom( 15, 46, "^Continue")
DISPBEGIN()
cScr := SAVESCREEN( 4, 10, 19, 64)
Shadow( 5, 12, 18, 64)
cClr := SETCOLOR("N/W")
@ 4,10 SAY " - " COLOR "W+/N*"
@ 4,13 SAY PADR(" Spreadsheet Info", 50);
COLOR("N/GR*")
SCROLL( 5, 10, 17, 62)
@ 6,13 SAY "Supported operators: ( ) + - * /"
@ 8,13 SAY "You should type formulas using LOTUS style:"
@ 9,13 SAY " D1*A1 D21 B1+E1*C5"
@ 10,13 SAY " 2+5 (A21+B5)/6 5.3 * 21"
@ 12,13 SAY "A formula can be up to 30 characters long."
@ 13,13 SAY "For numeric overflow or invalid formula, ZERO"
@ 14,13 SAY "will be returned as result."
SelectButtom(aCont)
DISPEND()
// Keep the letters running
WHILE (WhatKey( nTime , bBlock) == 0)
// Save your screen!
ScreenBlanker()
END
PressButtom(aCont)
SETCOLOR(cClr)
RESTSCREEN( 4, 10, 19, 64, cScr)
RETURN (NIL)
/*****
*
* "Blanks" the screen
*
*/
FUNCTION ScreenBlanker()
LOCAL cScr := SAVESCREEN( 0, 0, MAXROW(), MAXCOL() )
LOCAL cClr := SETCOLOR("N/N")
LOCAL i := 0
LOCAL nKey
SCROLL()
WHILE ((nKey := INKEY(1)) == 0)
@ i, 0 SAY SPACE(MAXCOL() + 1) COLOR "N/N"
IF (i == MAXROW())
i := 0
ENDIF
@ ++i, 0 SAY PADC( SAVEHEADER, MAXCOL() + 1) ;
COLOR HEADCLR
END
SETCOLOR(cClr)
RESTSCREEN( 0, 0, MAXROW(), MAXCOL(), cScr )
RETURN (nKey)
// EOF - MISCSPRD.PRG //